package com.work.xxzl.utils;

import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;

/**
 * @author WZ 2016/1/31 动态设置listView的高度
 *
 */
public class SetListViewHeight {
	// 但是这个方法有个两个细节需要注意：
	// 一是Adapter中getView方法返回的View的必须由LinearLayout组成
	// ，因为只有LinearLayout才有measure
	// ()方法，如果使用其他的布局如RelativeLayout，在调用listItem.measure(0,
	// 0);时就会抛异常，因为除LinearLayout外的其他布局的这个方法就是直接抛异常的
	// ，没理由…。我最初使用的就是这个方法，但是因为子控件的顶层布局是RelativeLayout，所以一直报错，不得不放弃这个方法。
	// 二是需要手动把ScrollView滚动至最顶端
	// ，因为使用这个方法的话，默认在ScrollView顶端的项是ListView，具体原因不了解，求大神解答…可以在Activity中设置：
	public static void setListViewHeightBaseOnChildren(ListView listview) {
		if (listview == null)
			return;

		ListAdapter listAdapter = listview.getAdapter();
		if (listAdapter == null) {
			return;
		}
		int totalHeight = 0;
		for (int i = 0; i < listAdapter.getCount(); i++) {
			View listItem = listAdapter.getView(i, null, listview);
			listItem.measure(0, 0);
			totalHeight += listItem.getMeasuredHeight();
		}
		ViewGroup.LayoutParams params = listview.getLayoutParams();
		params.height = totalHeight + listview.getDividerHeight()
				* (listAdapter.getCount() - 1);
		listview.setLayoutParams(params);
	}
}
